package com.schuxl.htmlobserver.observer;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.jsoup.helper.StringUtil;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import util.HttpUtil;
import util.Util;

import com.schuxl.htmlobserver.dataobject.MobileAd;
import com.schuxl.htmlobserver.dataobject.schemaTypen.sites.Sites.Site;

public class MobileHtmlObserver extends HtmlObserver<MobileAd> {

	
	
	
	public MobileHtmlObserver(Site site) {
		super(site);
	}
	
	
	
	
	@Override
	protected List<MobileAd> getCurrentList(Document document) {
		List<MobileAd> currentList = new ArrayList<MobileAd>();
		MobileAd mobileAd = null;
		
		Elements elements = document.select("div.listentry*");
		for(Element element : elements) {
			//TopOfPage Inserate (TOP-Inserate) nehme ich aus, da sie keine Angaben zu km, Bj. usw. enthalten u. eh nur teuere Eintraege sind
			if("".equals(element.select("div.topOfPageTitle").text())==false || element.hasAttr("id"))
				continue;
			//Private Angebote nehme ich auch raus, da hier SO VIEL Schass reingestellt wird, das es schon sehr laestig ist. Zudem ist es mit dem Anmelden in AUT leichter, wenn das Moped von einem Händler kommt
			if("Privat".equals(element.select("div.vendorType").text()) && "mobile.de-Germany".equals(site.getId()))
				continue;
			mobileAd = new MobileAd();
			String link = element.select("div").attr("data-href");
			mobileAd.setLink(link.substring(0,link.indexOf("?")));
			String imgSrc = element.select("img").attr("src");
			String imgRel = element.select("img").attr("rel");
			if(imgSrc.startsWith("http://i.ebayimg.com"))
				mobileAd.setImageLink(imgSrc);
			else if(imgRel.isEmpty()==false) //Leer darf es trotzdem nicht sein
				mobileAd.setImageLink(HttpUtil.isResourceAvailable(imgRel) ? imgRel : null);
			else
				mobileAd.setImageLink(null); //Damit kein leeres Bild im Mail ist
			String year = element.select("div.firstRegistration").text();
			if(Util.isGoodString(year)) {//Dadurch wird die IndexOutOfBoundsException vermieden
				if("Neufahrzeug".equals(year)) //Bei Neufahrzeugen steht das anstatt des Jahres drinnen
					mobileAd.setYear(Util.getCurrentYear());
				else
					mobileAd.setYear(Integer.parseInt(year.substring(year.indexOf("/")+1)));
			}else {
				mobileAd.setYear(0); //Dadurch scheidet er dann beim filtern aus
			}
			mobileAd.setTitle(element.select("a.infoLink").first().text());
			String km = element.select("div.mileage").text();
			if(Util.isGoodString(km))
				mobileAd.setKilometers(km.substring(0,km.indexOf("km")).replaceAll("\\D+",""));
			else
				mobileAd.setKilometers("Unbekannt");
			mobileAd.setPrice(Integer.parseInt(element.select("div.pricePrimaryCountryOfSale").text().replaceAll("\\D+","")));
			mobileAd.setDealer(element.select("div.vendorType").text());
			String location = element.select("div.vehicleLocation").text() + element.select("div.address").text();
			String ccm = element.select("div.description div:contains(Hubraum)").text();
			if(Util.isGoodString(ccm))
				mobileAd.setCcm(Integer.parseInt(ccm.substring(ccm.indexOf(":")+2,ccm.indexOf("cm")-1)));
				//Hubraum: 550 cm³
			mobileAd.setLocation(location);
			currentList.add(mobileAd);
		}
		return currentList;
	}

	
	
	
	
			
				
	

	
	
	
	
	
	
	
	
	
	
	
	
	
}
